<?php
/*
 * Encuesta de Alimentos (consumo) por paciente.
 * @Autor: Andrés Ubilla
 */
class Agregar extends TPage{
    public function onLoad($param){
        parent::onLoad($param);
        if(!$this->IsPostBack){
            $this->validarSession();
            $this->cargarInterfaz();
        }else{
            $oEncuestas = $this->obtenerEncuestasConsumoPostBack();
            $this->iniciarControlesPostBack($oEncuestas);
        }
    }
    
    private function validarSession(){
        $oUsuario = Util::getSession("Usuario");
        if(Util::isNullOrEmpty($oUsuario)){
            $this->Response->redirect($this->Service->constructUrl("Home"));
        }
    }
    
    private function cargarInterfaz(){        
        $alimentos = $this->obtenerAlimentos();
        $oPaciente = $this->obtenerDatosPaciente();
        $oEncuesta = $this->obtenerEncuestasConsumo();
        $this->iniciarControles($alimentos, $oPaciente, $oEncuesta);
    }
    
    private function obtenerAlimentos(){
        $oAlimento = new Alimentos();
        $oAlimentoBLL = new AlimentosBLL();
        $alimentos = $oAlimentoBLL->listar($oAlimento);       
        
        return $alimentos;
    }
    
    private function obtenerDatosPaciente(){
        try{
            $idPaciente = Util::isNull($this->Request["idPaciente"], "-1");

            $oPaciente = new Paciente();        

            if($idPaciente != "-1"){
                $oPacienteBLL = new PacienteBLL();
                $oPaciente = $oPacienteBLL->obtenerPorId($idPaciente);

                return $oPaciente;
            }else{              
                $oPaciente = null;
                return $oPaciente;
            }
        } catch (Exception $e){
            throw new Exception($e->getMessage());
        }        
    }
    
    private function obtenerEncuestasConsumo(){
        try{
            $idPaciente = Util::isNull($this->Request['idPaciente'], "-1");
            
            $oEncuestas = array();
            $oEncuestasBLL = new EncuestaconsumoBLL();
            
            $oEncuestas = $oEncuestasBLL->listarPorIdPaciente($idPaciente);
            
            return $oEncuestas;                                
        }catch(Exception $e){
            throw new Exception($e->getMessage());
        }
    }
    
    private function obtenerEncuestasConsumoPostBack(){
        try{
            $idPaciente = Util::isNull($this->Request['idPaciente'], "-1");
            
            $oEncuestas = array();
            $oEncuestasBLL = new EncuestaconsumoBLL();
            
            $oEncuestas = $oEncuestasBLL->listarPorIdPaciente($idPaciente);
            
            return $oEncuestas;                                
        }catch(Exception $e){
            throw new Exception($e->getMessage());
        }
    }

    private function iniciarControles($alimentos, $oPaciente, $oEncuestas){
        $this->AutoComplete->Attributes->Add("placeholder","Buscar paciente por rut o nombre");        
        
        if(count($alimentos) > 0){
            $lista = "<div class='row-fluid'>
                        <div class='span3'>
                            <label>Alimento: <em class='req'>*</em></label>
                            <select class='span12' id='ddlAlimentos'>
                            <option></option>";
            foreach($alimentos as $row){
                $lista .= "<option value='".$row->getId()."'>".$row->getNombre()."</option>";
            }
            
            $lista .= "</select>
                        </div>
                        <div class='span3'>
                        <label>Consumo: <em class='req'>*</em></label>
                            <select class='span12' id='ddlConsumo'>
                                <option></option>
                                <option value='1'>Nunca</option>
                                <option value='2'>Diaria</option>
                                <option value='3'>Semanal</option>
                                <option value='4'>Mensual</option>
                            </select>
                        </div>
                        <div class='span6'>
                            <label>Comentario:</label>
                            <input type='text' id='txtComentario' value='' class='span12' />
                        </div>
                    </div>";
            
            $this->litEncuestaAlimentos->Text = $lista;
        }
        
        if($oPaciente != null){
            $this->pnlFormEncuestaConsumo->Visible = true;
            try{                
                $this->litNombrePaciente->Text = $oPaciente->getNombre() ." ". $oPaciente->getApellido();
            }catch(Exception $e){
                throw new Exception($e->getMessage());
            }
        }else{
            $this->pnlFormEncuestaConsumo->Visible = false;
            $this->litAlert->Text = Util::setMensajeUsuario("Para registrar una evaluaci&oacute;n debe seleccionar un paciente <a href='?page=Paciente.Listar'>AQU&Iacute;</a> o en el buscador superior.", Util::MENSAJE_INFO);
        }
        
        if($oEncuestas != null){
            $this->pnlEncuestaConsumo->Visible = true;
            $this->pnlSinRegistros->Visible = false;
            $this->dgEncuestaConsumo->DataSource = $oEncuestas;
            $this->dgEncuestaConsumo->DataBind();
        }else{
            $this->pnlSinRegistros->Visible = true;
            $this->pnlEncuestaConsumo->Visible = false;
        }
    }
    
    private function iniciarControlesPostBack($oEncuestas){        
        if($oEncuestas != null){
            $this->pnlEncuestaConsumo->Visible = true;
            $this->pnlSinRegistros->Visible = false;
            $this->dgEncuestaConsumo->DataSource = $oEncuestas;
            $this->dgEncuestaConsumo->DataBind();
            $this->litAlert->Text = Util::setMensajeUsuario("Encuesta de alimento registrada exitosamente.", Util::MENSAJE_OK);
        }else{
            $this->pnlSinRegistros->Visible = true;
            $this->pnlEncuestaConsumo->Visible = false;
        }
    }

    public function buscarPacientes($sender,$param) {        
        $consulta = $param->getToken();
        
        $oPacienteBLL = new PacienteBLL();
        
        $arrPacientes = $oPacienteBLL->obtenerPorBusqueda($consulta);
        $listaPacientes = array();
                
        foreach ($arrPacientes as $row){
            $paciente = array('id' => $row->getId(), 'paciente' => $row->getNombre());
            $listaPacientes[] = $paciente;
        }

        $this->AutoComplete->DataSource = $listaPacientes;
        $this->AutoComplete->dataBind();
    }
    
    public function pacienteSeleccionado($sender,$param){              
        $id = $sender->Suggestions->DataKeys[ $param->selectedIndex ];
        
        if($id > 0){
            Util::setSession("Paciente", $id);
            $this->Response->redirect("index.php?page=Encuesta.Agregar&idPaciente=" . $id);
        }else{
            $this->Response->redirect("index.php?page=Paciente.Listar");
        }        
    }
    
    public function btnEliminarOnClick($sender, $param){
        $id = $this->idEncuesta->Value;
        
        $oEncuesta = new EncuestaconsumoBLL();
        $resultado = $oEncuesta->eliminar($id);
        
        if(!Util::isNullOrEmpty($resultado)){
            $this->litAlert->Text = Util::setMensajeUsuario("Error al eliminar la encuesta, por favor vuelva a intentarlo.", Util::MENSAJE_ERROR);
        }else{
            $this->cargarInterfaz();
            $this->litAlert->Text = Util::setMensajeUsuario("Encuesta ha sido eliminada exitosamente.", Util::MENSAJE_OK);            
        }
    }
}
?>
